网易/字节跳动内推笔试

突然发现离我第一次在hexo上传博已经一年了,然而博却少得可怜。

最近在忙着内推找工作的事,昨天做了网易的题,我以为都是编程,基础知识又没来得及准备,反正网易我感觉是凉了。
今天做了字节跳动的题,5到编程题,比起网易的题要简单,至少题读得懂t_t,但也凉了。才准备了一周,确实各种方面都不足,这两个笔试就算是拿来试水了,这个月得好好得复习才行。

网易

1.20道选择题:主要包括Java、计算机网络、Linux、数据结构方面的基础知识;

2.两道问答题:

1)Java如何进行内存管理,什么情况下会内存溢出?

Java运行时的数据区域:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池、直接内存。

OutofMemoryError异常:虚拟机栈和本地方法栈溢出、Java堆溢出、方法区和运行时常量池溢出、本机直接溢出。

参考:《深入理解Java虚拟机:JVM高级特性与最佳实践》

2)对ReenLocked与synchronized的认识,Lock与Sychronized有什么异同?

为了解决多个进程并发访问修改同一文件造成异常,Java多线程中引入了同步监视器,使用同步监视器的通用方法就是使用同步代码块。通常使用可能被访问的共享资源当作同步监视器。synchronized主要分同步方法和同步代码块,对synchronized修饰的同步方法,无需显示指定同步监视器,同步方法的同步监视器就是this,即调用该方法的实例对象。建议使用同步代码块代替同步方法。除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码进行同步,影响代码执行效率。

ReenTrantLock可重入锁,使用该Lock对象可显示地加锁、释放锁。对于ReenTrantLock,一个线程可以对已被加锁的ReenTrantLock再次加锁,ReenTrantLock对象会维持一个计数器来lock()方法的嵌套调用,线程在每次执行lock()加锁后,必须显示地调用unlock()来释放锁。

同步锁Lock通过显式定义同步锁来提供同步,它提供了比synchronized方法和synchronized代码块更广泛的锁定操作。Lock允许使用更灵活的结构,可以具有差别很大的属性,并且支持多个相关的Condition对象。

参考:《疯狂Java讲义(第3版)》

3.三道编程题

字节跳动

五道编程题